PREFIX := arm-elf-
CC    := $(PREFIX)gcc
LD    := $(PREFIX)gcc
AS    := $(PREFIX)as
AR    := $(PREFIX)ar
OBJCOPY := $(PREFIX)objcopy

DEVKITARM := $(HOME)/devkitARM
GP32SDK := $(HOME)/proj/gp32/lib
GPLIBS := -L$(DEVKITARM)/arm-elf/lib -L$(GP32SDK)/gamepark_sdk/lib
INCLUDES := -I$(DEVKITARM)/arm-elf/include -I$(GP32SDK)/gamepark_sdk/include

CFLAGS := -W -Wall -Wno-sign-compare -Wno-unused -Wpointer-arith -Wbad-function-cast -Wcast-align \
-Waggregate-return -Wshadow -Wstrict-prototypes \
-mcpu=arm920 -mtune=arm920t -std=c99 -O3 -fstrict-aliasing -fexpensive-optimizations \
-falign-functions -fweb -frename-registers \
-fomit-frame-pointer -ffast-math -finline -finline-functions -finline-limit=200 -fno-builtin -fno-common \
-fno-exceptions -ffreestanding -fshort-enums \
-mstructure-size-boundary=8 -mno-thumb-interwork \
-ansi -pedantic \
-Isrc -Isrc/gp32 $(INCLUDES) -DLITTLE_ENDIAN -DGP32 -DLSB_FIRST \
-DSIGNED_SAMPLES -DACORN -DINLINE="static __inline" -DUSE_GP_MEM -DUSE_DRZ80

OBJS   = obj/gp32/gpstart.o obj/gp32/gp32_frontend.o \
         obj/gp32/asm_memset.o obj/gp32/asm_memcpy.o

all: mamegpdr.gxb
	b2fxec -t "MAME GP32 2.3 (Fast)" -b "mamegpdr.bmp" -a "Slaanesh" mamegpdr.gxb mamegpdr.fxe

mamegpdr.gxb: mamegpdr.elf
	$(OBJCOPY) -O binary mamegpdr.elf mamegpdr.gxb

mamegpdr.elf: $(OBJS)
	$(LD) -s -specs=gp32_gpsdk.specs $(OBJS) $(LIBS) -o mamegpdr.elf $(GPLIBS) -lgpgraphic -lgpmem -lgpos -lgpstdlib -lgpstdio -lgpsound -lgpfont -lm 

obj/%.o: src/%.c
	$(CC) $(CFLAGS) -o $@ -c $<

obj/%.o: src/%.s
	$(CC) $(CFLAGS) -o $@ -c $<

obj/%.o: src/%.S
	$(CC) $(CFLAGS) -o $@ -c $<

obj/%.a:
	 $(AR) -r $@ $^

# dependencies
obj/gp32/gp32_frontend.o: src/gp32/gp32_frontend.c src/gp32/gp32_frontend.h src/gp32/gp32_frontend_list.h
